package com.example.jdbc.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * 使用@PropertySource 结合 @ConfigurationProperties
 *
 */
@Configuration
/**
 * 指定加载哪一个配置信息属性类，加载了才能注入
 */
//@EnableConfigurationProperties(JdbcProperties.class)//因为JdbcProperties实体类的创建被注解了，所以这里也要注解
public class NewJdbcConfiguration {
    /**
     * 1.将JdbcProperties读取到的属性注入
     * 无论注入多少次，都只用读取一次properties文件
     * 直接注入还不可以，需要指定配置类（存放配置属性的类）
     */
    //@Autowired
    //private JdbcProperties jdbcProperties;

    /**
     * 2.在不实用@AutoWired注解的情况下，也可以通过构造方法来注入
     * @param jdbcProperties
     */
    /*public NewJdbcConfiguration(JdbcProperties jdbcProperties) {
        this.jdbcProperties = jdbcProperties;
    }*/

    /**
     * 3.通过方法的形式参数注入
     * 可以直接在方法中注入，无需使用构造方法注入或者@AutoWired注入，
     * 甚至不需要private JdbcProperties jdbcProperties;这个变量
     * @param jdbcProperties 通过像Controller那样的注入
     * @return
     */
    //@Bean
    public DataSource getDataSource(JdbcProperties jdbcProperties){
        DruidDataSource druidDataSource = new DruidDataSource();

        druidDataSource.setUrl(jdbcProperties.getUrl());

        druidDataSource.setDriverClassName(jdbcProperties.getDriverClassName());

        druidDataSource.setUsername(jdbcProperties.getUserName());

        druidDataSource.setPassword(jdbcProperties.getPassword());

        return druidDataSource;
    }


}
